﻿using System;
using System.Data;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Diagnostics;

namespace VeriAlimi
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void btnGozat_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.FileName = "";

            if (cmbExcel.SelectedIndex == 0)
            {
                dlg.Filter = "Excel|*.xls";
            }
            else
            {
                dlg.Filter = "Excel 2003|*.xlsx";
            }


            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtDosya.Text = dlg.FileName;
            }
        }

        private void MontajImport()
        {
            bool openxml = Convert.ToBoolean(cmbExcel.SelectedIndex);
            LinqToExcelProvider provider = new LinqToExcelProvider(txtDosya.Text);
            var query = from p in provider.GetWorkSheet(openxml)
                        select new
                        {
                            SistemNo = Convert.ToString(p.Field<object>("Sistem Numarası")),
                            FaturaNo = Convert.ToString(p.Field<object>("Fatura No")),
                            CariKodu = Convert.ToString(p.Field<object>("CariKod")),
                            AnaCariKodu = Convert.ToString(p.Field<object>("AnaCariKod")),
                            Firma = Convert.ToString(p.Field<object>("Firma")),
                            Grup = Convert.ToString(p.Field<object>("Grup")),
                            Plaka = Convert.ToString(p.Field<object>("Plaka")),
                            Musteri = Convert.ToString(p.Field<object>("Müşteri")),
                            Telefon = Convert.ToString(p.Field<object>("Müşteri Telefonu")),
                            Marka = Convert.ToString(p.Field<object>("Marka")),
                            Model = Convert.ToInt32(p.Field<object>("Model")),
                            MontajYeri = Convert.ToString(p.Field<object>("Montaj Yeri")),
                            KoltukSayisi = Convert.ToInt32(p.Field<object>("Koltuk Sayısı")),
                            SasiNo = Convert.ToString(p.Field<object>("Şasi No")),
                            Sistem = Convert.ToString(p.Field<object>("Sistem")),
                            MonitorSeri = Convert.ToString(p.Field<object>("Monitör Seri Numaraları")),
                            ServerSeriNo = Convert.ToString(p.Field<object>("Server Seri Numarası")),
                            MontajTarihi = Convert.ToDateTime(p.Field<object>("Montaj Tarihi")),
                        };

            using (AsTekEntities ent = new AsTekEntities())
            {
                var sistemTanimlari = ent.SistemTanimlari.ToList();
                var markalar = ent.AracMarkalari.ToList();
                var cariler = ent.Firmalar.Select(x => new { x.CariKodu, x.CariUnvan1 }).ToList();

                #region Kontroller
                bool hata = false;



                var q3 = from c in query
                         where !(from o in sistemTanimlari
                                 select o.Aciklama)
                                .Contains(c.Sistem)
                         group c by c.Sistem into g
                         select g.Key;

                foreach (var item in q3)
                {
                    hata = true;
                    ErrorWrite(item + " sistem kaydı açılmamış !");
                }


                var q4 = from c in query
                         where !(from o in markalar
                                 select o.MarkaAdi)
                                .Contains(c.Marka)
                         group c by c.Marka into g
                         select g.Key;

                foreach (var item in q4)
                {
                    hata = true;
                    ErrorWrite(item + " marka kaydı bulunamadı !");
                }
                #endregion

                if (hata)
                {
                    MessageBox.Show("Aktarımda hata oluştu ! Error.txt dosyasını inceleyin");
                }
                else
                {
                    foreach (var item in query)
                    {
                        Arac newarc = ent.Araclar.Where(x => x.AracKodu == item.SistemNo).FirstOrDefault();
                        if (newarc == null)
                        {
                            newarc = new Arac();

                            #region Araç Kaydı
                            newarc.AracKodu = item.SistemNo;
                            newarc.AltCariKodu = item.CariKodu.Replace(',', '.');
                            newarc.AnaCariKodu = item.AnaCariKodu.Replace(',', '.');

                            if (string.IsNullOrEmpty(newarc.AnaCariKodu))
                            {
                                newarc.AnaCariKodu = newarc.AltCariKodu;
                            }

                            if (cariler.Where(x => x.CariKodu == newarc.AnaCariKodu).Count() == 0)
                            {
                                var cari = cariler.Where(x => x.CariUnvan1 == item.Grup).FirstOrDefault();
                                if (cari != null)
                                {
                                    newarc.AnaCariKodu = cari.CariKodu;
                                }
                            }

                            if (cariler.Where(x => x.CariKodu == newarc.AltCariKodu).Count() == 0)
                            {
                                var cari = cariler.Where(x => x.CariUnvan1 == item.Firma).FirstOrDefault();
                                if (cari != null)
                                    newarc.AltCariKodu = cari.CariKodu;
                            }

                            newarc.KoltukSayisi = item.KoltukSayisi;
                            newarc.MontajTarihi = item.MontajTarihi;
                            newarc.MontajYeri = item.MontajYeri;
                            newarc.Plaka = item.Plaka;
                            newarc.SasiNo = item.SasiNo;
                            newarc.SistemNo = item.SistemNo;

                            if (item.Model > 1900)
                                newarc.UretimYili = new DateTime(item.Model, 1, 1);
                            else
                                newarc.UretimYili = new DateTime(1900, 1, 1);

                            newarc.SistemID = sistemTanimlari.Where(x => x.Aciklama == item.Sistem).Select(x => x.ID).FirstOrDefault();
                            newarc.FirmwareID = -99;
                            newarc.MarkaID = markalar.Where(x => x.MarkaAdi == item.Marka).Select(x => x.ID).FirstOrDefault();

                            ent.AddToAraclar(newarc);

                            ent.SaveChanges();
                            #endregion


                            int faturaID = ent.FaturaIDBul(item.FaturaNo, 0).Select(x => x.Value).FirstOrDefault();
                            bool yeniHr = false;
                            AracHareketi hr = ent.AracHareketleri.Where(x => x.AracID == newarc.ID && x.FaturaID == faturaID).FirstOrDefault();
                            if (hr == null)
                            {
                                hr = new AracHareketi();
                                yeniHr = true;
                            }

                            hr.OlusturanKullanici = -1;
                            hr.OlusturulmaTarihi = DateTime.Now;
                            hr.KapanmaTarihi = new DateTime(1900, 1, 1);
                            hr.KapatanKullanici = -1;
                            hr.Durum = 1;
                            hr.EvrakTip = 0;
                            hr.FaturaID =
                            hr.AracID = newarc.ID;
                            hr.Tarih = item.MontajTarihi;
                            hr.MusteriAdi = item.Musteri;
                            hr.MusteriTelefon = item.Telefon;
                            hr.AracGelisTarihi = item.MontajTarihi;
                            hr.AracHareketTarihi = item.MontajTarihi;
                            hr.ServiseGidilecekTarih = item.MontajTarihi;
                            hr.ServisMerkezID = -1;
                            hr.ServisMerkezID = -1;
                            hr.TeknisyenID1 = -1;
                            hr.TeknisyenID2 = -1;
                            hr.TeknisyenID3 = -1;
                            hr.TeknisyenID4 = -1;
                            hr.TeknisyenID5 = -1;
                            hr.TeknisyenID6 = -1;
                            hr.TeknisyenID7 = -1;
                            hr.TeknisyenID8 = -1;
                            hr.TeknisyenID9 = -1;
                            hr.TeknisyenID10 = -1;
                            hr.MontajSefiTarihi = DateTime.Now;

                            if (yeniHr)
                            {
                                hr.TeslimAlan = "YOK-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();
                                hr.HizmetYeri = "YOK-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();
                                hr.Notlar = "YOK-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();
                                hr.ServisBelgeNo = "YOK-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();

                                ent.AddToAracHareketleri(hr);
                            }

                            ent.SaveChanges();
                        }
                    }
                }
            }
        }

        private void AracImport()
        {
            bool openxml = Convert.ToBoolean(cmbExcel.SelectedIndex);
            LinqToExcelProvider provider = new LinqToExcelProvider(txtDosya.Text);
            var query = from p in provider.GetWorkSheet(openxml)
                        select new
                        {
                            SistemNo = Convert.ToString(p.Field<object>("Sistem Numarası")),
                            Marka = Convert.ToString(p.Field<object>("Marka")),
                            Model = Convert.ToInt32(p.Field<object>("Model")),
                            MontajYeri = Convert.ToString(p.Field<object>("Montaj Yeri")),
                            KoltukSayisi = Convert.ToInt32(p.Field<object>("Koltuk Sayısı")),
                            SasiNo = Convert.ToString(p.Field<object>("Şasi No")),
                            Sistem = Convert.ToString(p.Field<object>("Sistem")),
                            Firmware = Convert.ToString(p.Field<object>("Firmware")),
                            Server = Convert.ToString(p.Field<object>("Server")),
                            HDD = Convert.ToString(p.Field<object>("HDD")),
                            Hub = Convert.ToString(p.Field<object>("Hub")),
                            Monitor = Convert.ToString(p.Field<object>("Monitör")),
                            CaptureBox = Convert.ToString(p.Field<object>("CaptureBox")),
                            Receiver = Convert.ToString(p.Field<object>("Receiver")),
                            UcGModem = Convert.ToString(p.Field<object>("3G Modem")),
                            Wifi = Convert.ToString(p.Field<object>("Wi-Fi Hotspot")),
                            SeriNo = Convert.ToString(p.Field<object>("Seri Numarası")),
                            Navigasyon = Convert.ToString(p.Field<object>("Navigasyon")),
                            SdCard = Convert.ToString(p.Field<object>("SD Card - Anons")),
                            GPSMouse = Convert.ToString(p.Field<object>("GPS Mouse")),
                            HubKoruyucu = Convert.ToString(p.Field<object>("Hub Koruyucu")),
                            Digiturk = Convert.ToString(p.Field<object>("Digiturk")),
                            Anten = Convert.ToString(p.Field<object>("Anten"))
                        };

            using (AsTekEntities ent = new AsTekEntities())
            {
                var markalar = ent.AracMarkalari.ToList();
                var sistemTanimlari = ent.SistemTanimlari.ToList();
                var firmware = ent.FirmwareTanimlari.ToList();
                var ozelliktanim = ent.OzellikTanimlari.ToList();

                #region Kontroller
                bool hata = false;



                var q3 = from c in query
                         where !(from o in sistemTanimlari
                                 select o.Aciklama)
                                .Contains(c.Sistem)
                         group c by c.Sistem into g
                         select g.Key;

                foreach (var item in q3)
                {
                    hata = true;
                    ErrorWrite(item + " sistem kaydı açılmamış !");
                }


                var q4 = from c in query
                         where !(from o in markalar
                                 select o.MarkaAdi)
                                .Contains(c.Marka)
                         group c by c.Marka into g
                         select g.Key;

                foreach (var item in q4)
                {
                    hata = true;
                    ErrorWrite(item + " marka kaydı bulunamadı !");
                }

                var q5 = from c in query
                         where !(from o in firmware
                                 select o.Aciklama)
                                .Contains(c.Firmware)
                         group c by c.Firmware into g
                         select g.Key;

                foreach (var item in q5)
                {
                    hata = true;
                    ErrorWrite(item + " firmware kaydı bulunamadı !");
                }

                #endregion

                if (hata)
                {
                    MessageBox.Show("Aktarımda hata oluştu ! Error.txt dosyasını inceleyin");
                }
                else
                {
                    foreach (var item in query.Where(x => x.SistemNo != ""))
                    {
                        Arac newarc = ent.Araclar.Where(x => x.AracKodu == item.SistemNo).FirstOrDefault();
                        if (newarc != null)
                        {
                            newarc.KoltukSayisi = item.KoltukSayisi;
                            newarc.MontajYeri = item.MontajYeri;
                            newarc.SasiNo = item.SasiNo;
                            newarc.SistemNo = item.SistemNo;
                            newarc.MarkaID = markalar.Where(x => x.MarkaAdi == item.Marka).Select(x => x.ID).FirstOrDefault();
                            newarc.SistemID = sistemTanimlari.Where(x => x.Aciklama == item.Sistem).Select(x => x.ID).FirstOrDefault();
                            newarc.FirmwareID = firmware.Where(x => x.Aciklama == item.Firmware).Select(x => x.ID).FirstOrDefault();

                            if (!string.IsNullOrEmpty(item.Server))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Server").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim1 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim1 != null)
                                {
                                    tanim1.Deger = item.Server;
                                }
                                else
                                {
                                    tanim1 = new AracOzellik();
                                    tanim1.AracID = newarc.ID;
                                    tanim1.OzellikID = id;
                                    tanim1.Deger = item.Server;
                                    ent.AddToAracOzellikleri(tanim1);
                                }
                            }


                            if (!string.IsNullOrEmpty(item.HDD))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "HDD").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim2 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim2 != null)
                                {
                                    tanim2.Deger = item.HDD;
                                }
                                else
                                {
                                    tanim2 = new AracOzellik();
                                    tanim2.AracID = newarc.ID;
                                    tanim2.OzellikID = id;
                                    tanim2.Deger = item.HDD;
                                    ent.AddToAracOzellikleri(tanim2);
                                }
                            }


                            if (!string.IsNullOrEmpty(item.Hub))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Hub").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim3 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim3 != null)
                                {
                                    tanim3.Deger = item.Hub;
                                }
                                else
                                {
                                    tanim3 = new AracOzellik();
                                    tanim3.AracID = newarc.ID;
                                    tanim3.OzellikID = id;
                                    tanim3.Deger = item.Hub;
                                    ent.AddToAracOzellikleri(tanim3);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.Monitor))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Monitör").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim4 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim4 != null)
                                {
                                    tanim4.Deger = item.Monitor;
                                }
                                else
                                {
                                    tanim4 = new AracOzellik();
                                    tanim4.AracID = newarc.ID;
                                    tanim4.OzellikID = id;
                                    tanim4.Deger = item.Monitor;
                                    ent.AddToAracOzellikleri(tanim4);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.CaptureBox))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "CaptureBox").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim5 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim5 != null)
                                {
                                    tanim5.Deger = item.CaptureBox;
                                }
                                else
                                {
                                    tanim5 = new AracOzellik();
                                    tanim5.AracID = newarc.ID;
                                    tanim5.OzellikID = id;
                                    tanim5.Deger = item.CaptureBox;
                                    ent.AddToAracOzellikleri(tanim5);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.Receiver))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Receiver").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim6 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim6 != null)
                                {
                                    tanim6.Deger = item.Receiver;
                                }
                                else
                                {
                                    tanim6 = new AracOzellik();
                                    tanim6.AracID = newarc.ID;
                                    tanim6.OzellikID = id;
                                    tanim6.Deger = item.Receiver;
                                    ent.AddToAracOzellikleri(tanim6);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.UcGModem))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "3G Modem").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim7 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim7 != null)
                                {
                                    tanim7.Deger = item.UcGModem;
                                }
                                else
                                {
                                    tanim7 = new AracOzellik();
                                    tanim7.AracID = newarc.ID;
                                    tanim7.OzellikID = id;
                                    tanim7.Deger = item.UcGModem;
                                    ent.AddToAracOzellikleri(tanim7);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.Wifi))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Wi-Fi Hotspot").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim8 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim8 != null)
                                {
                                    tanim8.Deger = item.Wifi;
                                }
                                else
                                {
                                    tanim8 = new AracOzellik();
                                    tanim8.AracID = newarc.ID;
                                    tanim8.OzellikID = id;
                                    tanim8.Deger = item.Wifi;
                                    ent.AddToAracOzellikleri(tanim8);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.SeriNo))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Seri Numarası").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim9 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim9 != null)
                                {
                                    tanim9.Deger = item.SeriNo;
                                }
                                else
                                {
                                    tanim9 = new AracOzellik();
                                    tanim9.AracID = newarc.ID;
                                    tanim9.OzellikID = id;
                                    tanim9.Deger = item.SeriNo;
                                    ent.AddToAracOzellikleri(tanim9);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.Navigasyon))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Navigasyon").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim10 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim10 != null)
                                {
                                    tanim10.Deger = item.Navigasyon;
                                }
                                else
                                {
                                    tanim10 = new AracOzellik();
                                    tanim10.AracID = newarc.ID;
                                    tanim10.OzellikID = id;
                                    tanim10.Deger = item.Navigasyon;
                                    ent.AddToAracOzellikleri(tanim10);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.SdCard))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "SD Card - Anons").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim11 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim11 != null)
                                {
                                    tanim11.Deger = item.SdCard;
                                }
                                else
                                {
                                    tanim11 = new AracOzellik();
                                    tanim11.AracID = newarc.ID;
                                    tanim11.OzellikID = id;
                                    tanim11.Deger = item.SdCard;
                                    ent.AddToAracOzellikleri(tanim11);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.GPSMouse))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "GPS Mouse").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim12 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim12 != null)
                                {
                                    tanim12.Deger = item.GPSMouse;
                                }
                                else
                                {
                                    tanim12 = new AracOzellik();
                                    tanim12.AracID = newarc.ID;
                                    tanim12.OzellikID = id;
                                    tanim12.Deger = item.GPSMouse;
                                    ent.AddToAracOzellikleri(tanim12);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.HubKoruyucu))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Hub Koruyucu").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim13 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim13 != null)
                                {
                                    tanim13.Deger = item.HubKoruyucu;
                                }
                                else
                                {
                                    tanim13 = new AracOzellik();
                                    tanim13.AracID = newarc.ID;
                                    tanim13.OzellikID = id;
                                    tanim13.Deger = item.HubKoruyucu;
                                    ent.AddToAracOzellikleri(tanim13);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.Digiturk))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Digiturk").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim14 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim14 != null)
                                {
                                    tanim14.Deger = item.Digiturk;
                                }
                                else
                                {
                                    tanim14 = new AracOzellik();
                                    tanim14.AracID = newarc.ID;
                                    tanim14.OzellikID = id;
                                    tanim14.Deger = item.Digiturk;
                                    ent.AddToAracOzellikleri(tanim14);
                                }
                            }

                            if (!string.IsNullOrEmpty(item.Anten))
                            {
                                int id = ozelliktanim.Where(x => x.OzellikAdi == "Anten").Select(x => x.ID).FirstOrDefault();
                                AracOzellik tanim15 = ent.AracOzellikleri.Where(x => x.AracID == newarc.ID && x.OzellikID == id).FirstOrDefault();
                                if (tanim15 != null)
                                {
                                    tanim15.Deger = item.Anten;
                                }
                                else
                                {
                                    tanim15 = new AracOzellik();
                                    tanim15.AracID = newarc.ID;
                                    tanim15.OzellikID = id;
                                    tanim15.Deger = item.Anten;
                                    ent.AddToAracOzellikleri(tanim15);
                                }
                            }


                            ent.SaveChanges();
                        }
                    }
                }
            }
        }


        private void ServisImport()
        {
            bool openxml = Convert.ToBoolean(cmbExcel.SelectedIndex);
            LinqToExcelProvider provider = new LinqToExcelProvider(txtDosya.Text);
            var query = from p in provider.GetWorkSheet(openxml)
                        select new
                        {
                            SistemNo = Convert.ToString(p.Field<object>("Sistem Numarası")),
                            Plaka = Convert.ToString(p.Field<object>("Plaka")),
                            OtobusGelis = Convert.ToDateTime(p.Field<object>("Otobüs Geliş Tarihi")),
                            OtobusGidis = Convert.ToDateTime(p.Field<object>("Otobüs Hareket Tarihi")),
                            ServisBaslama = Convert.ToDateTime(p.Field<object>("Servis Başlama Tarihi")),
                            ServisBitis = Convert.ToDateTime(p.Field<object>("Servis Bitiş Tarihi")),
                            Musteri = Convert.ToString(p.Field<object>("Müşteri")),
                            Telefon = Convert.ToString(p.Field<object>("Müşteri Telefonu")),
                            HizmetYeri = Convert.ToString(p.Field<object>("Hizmet Yeri")),
                            Sorunlar = Convert.ToString(p.Field<object>("Müşteri Sorunları")),
                            Notlar = Convert.ToString(p.Field<object>("Notlar")),
                            Servis = Convert.ToString(p.Field<object>("Servis")),
                            ServisBelgeNo = Convert.ToString(p.Field<object>("Servis Belge No")),
                            Teknisyen1 = Convert.ToString(p.Field<object>("Teknisyen 1")),
                            Teknisyen2 = Convert.ToString(p.Field<object>("Teknisyen 2")),
                            Teknisyen3 = Convert.ToString(p.Field<object>("Teknisyen 3")),
                            KapatanKullanici = Convert.ToString(p.Field<object>("Kaydı Kapatan")),
                            KapamaTarihi = Convert.ToDateTime(p.Field<object>("Kapatma Tarihi")),
                            GuncelleyenKullanici = Convert.ToString(p.Field<object>("Son Güncelleyen")),
                            GuncellemeTarihi = Convert.ToDateTime(p.Field<object>("Güncelleme Tarihi"))
                        };


            using (AsTekEntities ent = new AsTekEntities())
            {
                var teknisyenler = ent.Teknisyenler.ToList();
                var araclar = ent.Araclar.ToList();
                var servisMerkezleri = ent.ServisMerkezleri.ToList();
                var servisSorunlari = ent.ServisSorunTanimlari.ToList();

                List<string> _teknisyenler = new List<string>();
                List<string> _sorunlar = new List<string>();
                foreach (var item in query)
                {
                    if (!_teknisyenler.Contains(item.KapatanKullanici))
                        _teknisyenler.Add(item.KapatanKullanici);

                    if (!_teknisyenler.Contains(item.Teknisyen1))
                        _teknisyenler.Add(item.Teknisyen1);

                    if (!_teknisyenler.Contains(item.Teknisyen2))
                        _teknisyenler.Add(item.Teknisyen2);

                    if (!_teknisyenler.Contains(item.Teknisyen3))
                        _teknisyenler.Add(item.Teknisyen3);

                    if (!_teknisyenler.Contains(item.GuncelleyenKullanici))
                        _teknisyenler.Add(item.GuncelleyenKullanici);

                    string[] srn = item.Sorunlar.Split('#');
                    foreach (var s in srn)
                    {
                        if (!_sorunlar.Contains(s))
                            _sorunlar.Add(s);
                    }
                }

                var q = from c in _teknisyenler
                        where !(from o in teknisyenler
                                select o.Adi)
                               .Contains(c) && c != ""
                        select c;

                bool hata = false;
                foreach (var item in q)
                {
                    hata = true;
                    ErrorWrite(item + " adlı teknisyen tanıtılmamış lütfen kaydını açın ! sonra tekrar aktarın");
                }

                var q2 = from c in query
                         where !(from o in araclar
                                 select o.Plaka)
                                .Contains(c.Plaka)
                         group c by c.Plaka into g
                         select g.Key;

                foreach (var item in q2)
                {
                    hata = true;
                    ErrorWrite(item + " plakalı araç tanıtımı yapılmamış yada montaj kaydı yok !");
                }


                var q3 = from c in query
                         where !(from o in servisMerkezleri
                                 select o.Adi)
                                .Contains(c.Servis)
                         group c by c.Servis into g
                         select g.Key;

                foreach (var item in q3)
                {
                    hata = true;
                    ErrorWrite(item + " servis merkezi kaydı bulunamadı !");
                }


                var q4 = from c in _sorunlar
                         where !(from o in servisSorunlari
                                 select o.SorunTanimi)
                                .Contains(c)
                         select c;

                foreach (var item in q4)
                {
                    hata = true;
                    ErrorWrite(item + " servis sorun kaydı bulunamadı !");
                }


                if (hata)
                {
                    MessageBox.Show("Aktarımda hata oluştu ! Error.txt dosyasını inceleyin");
                }
                else
                {
                    foreach (var item in query)
                    {
                        AracHareketi hr = new AracHareketi();
                        hr.OlusturanKullanici = teknisyenler.Where(x => x.Adi == item.GuncelleyenKullanici).Select(x => x.ID).FirstOrDefault();
                        hr.OlusturulmaTarihi = DateTime.Now;
                        hr.KapanmaTarihi = new DateTime(1900, 1, 1);
                        hr.KapatanKullanici = teknisyenler.Where(x => x.Adi == item.KapatanKullanici).Select(x => x.ID).FirstOrDefault();
                        hr.Durum = 0;
                        hr.EvrakTip = 1;
                        hr.FaturaID = 0;
                        hr.AracID = araclar.Where(x => x.Plaka == item.Plaka).Select(x => x.ID).FirstOrDefault();
                        hr.Tarih = DateTime.Now;
                        hr.MusteriAdi = item.Musteri;
                        hr.MusteriTelefon = item.Telefon;

                        if (item.OtobusGelis.Year > 1900)
                            hr.AracGelisTarihi = item.OtobusGelis;
                        else
                            hr.AracGelisTarihi = new DateTime(1900, 1, 1);

                        if (item.OtobusGidis.Year > 1900)
                            hr.AracHareketTarihi = item.OtobusGidis;
                        else
                            hr.AracHareketTarihi = new DateTime(1900, 1, 1);

                        if (item.ServisBaslama.Year > 1900)
                            hr.ServiseGidilecekTarih = item.ServisBaslama;
                        else
                            hr.ServiseGidilecekTarih = new DateTime(1900, 1, 1);

                        if (item.ServisBitis.Year > 1900)
                            hr.MontajSefiTarihi = item.ServisBitis;
                        else
                            hr.MontajSefiTarihi = new DateTime(1900, 1, 1);

                        hr.HizmetYeri = item.HizmetYeri;
                        hr.Notlar = item.Notlar;
                        hr.ServisBelgeNo = item.ServisBelgeNo;
                        hr.ServisMerkezID = servisMerkezleri.Where(x => x.Adi == item.Servis).Select(x => x.ID).FirstOrDefault();
                        hr.TeknisyenID1 = teknisyenler.Where(x => x.Adi == item.Teknisyen1).Select(x => x.ID).FirstOrDefault();
                        hr.TeknisyenID2 = teknisyenler.Where(x => x.Adi == item.Teknisyen2).Select(x => x.ID).FirstOrDefault();
                        hr.TeknisyenID3 = teknisyenler.Where(x => x.Adi == item.Teknisyen3).Select(x => x.ID).FirstOrDefault();
                        hr.TeknisyenID4 = -1;
                        hr.TeknisyenID5 = -1;
                        hr.TeknisyenID6 = -1;
                        hr.TeknisyenID7 = -1;
                        hr.TeknisyenID8 = -1;
                        hr.TeknisyenID9 = -1;
                        hr.TeknisyenID10 = -1;
                        hr.TeslimAlan = "YOK";

                        ent.AddToAracHareketleri(hr);
                        ent.SaveChanges();

                        string[] srn = item.Sorunlar.Split('#');
                        foreach (var s in srn)
                        {
                            ServisSorunu srv = new ServisSorunu();
                            srv.SorunID = servisSorunlari.Where(x => x.SorunTanimi == s).Select(x => x.ID).FirstOrDefault();
                            srv.HareketID = hr.ID;
                            srv.Deger = 1;
                            ent.AddToServisSorunlari(srv);
                        }
                        ent.SaveChanges();

                    }
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (File.Exists("Error.txt"))
            {
                File.Delete("Error.txt");
            }

            if (cmbTip.SelectedIndex == 0)
            {
                ServisImport();
            }
            else if (cmbTip.SelectedIndex == 1)
            {
                MontajImport();
            }
            else
            {
                AracImport();
            }

            MessageBox.Show("Tamamlandı !");

            if (File.Exists("Error.txt"))
            {
                Process.Start("Error.txt");
            }
        }


        private void ErrorWrite(string message)
        {
            using (StreamWriter sw = new StreamWriter("Error.txt", true))
            {
                sw.WriteLine(message);
                sw.Close();
            }
        }


        private void frmMain_Load(object sender, EventArgs e)
        {
            cmbExcel.SelectedIndex = 0;
            cmbTip.SelectedIndex = 1;
        }
    }
}
